signature TABLE_STRUCTS =
sig
  include ATOMS
  structure Types : TYPES2
  sharing Atoms = Types.Atoms
end

signature TABLE =
sig
  include TABLE_STRUCTS
  
  type 'a t
  
  val empty : unit -> 'a t
  val enter : Id.t * ('a) * 'a t -> 'a t
  val enteru : Id.t * ('a) * 'a t -> 'a t
  val look : Id.t * 'a t -> 'a option
  val looku : Id.t * 'a t -> 'a
  val toString : 'a t * ('a -> string) -> string
  
  val baseTenv : unit -> Types.t t
  val baseVenv : unit -> {tipe : Types.t, fresh : Id.t} t
  val tenvToString : Types.t t -> string
  val venvToString : {tipe : Types.t, fresh : Id.t} t -> string
end  
 